Fift ile basit bir çok imzalı sözleşme oluşturun
Bu bilgi çok düşük seviyeli. Yeni başlayanlar için anlaşılması zor olabilir ve fift
anlamak isteyen ileri düzey kişiler için tasarlanmıştır. Fift'in kullanımı günlük görevlerde zorunlu değildir.
💡 Genel Bakış
Bu eğitim, çok imzalı sözleşmenizi nasıl dağıtacağınızı öğrenmenize yardımcı olacaktır.
(n, k)-çok imzalı sözleşmesi, n özel anahtar sahibine sahip bir çok imzalı cüzdandır; istek (yani emir, sorgu) en az k imza toplandığında mesaj göndermeyi kabul eder.
Orijinal çok imzalı sözleşme kodu ve akifoq tarafından yapılan güncellemeler temel alınarak:
- orijinal TON Blockchain çok imzalı-code.fc
- akifoq/multisig çok imzalı ile çalışmak için fift kütüphaneleri.
Çok imzalıyla yeni tanışanlar için: Çok İmzalı Teknoloji Nedir? (video)
📖 Neler öğreneceksiniz
- Basit bir çok imzalı cüzdan nasıl oluşturulur ve özelleştirilir.
- Çok imzalı cüzdan nasıl dağıtılır lite-client kullanılarak.
- İstek nasıl imzalanır ve blockchain'e mesaj olarak gönderilir.
⚙ Ortamınızı ayarlayın
Yolculuğumuza başlamadan önce, ortamınızı kontrol edin ve hazırlayın.
func
,fift
,lite-client
ikili dosyalarını vefiftlib
yiKurulum
bölümünden indirin.- repo klonlayın ve CLI'da dizinini açın.
git clone https://github.com/akifoq/multisig.git
cd ~/multisig
🚀 Hadi başlayalım!
- Kodu fift'e derleyin.
- Çok imzalı sahiplerin anahtarlarını hazırlayın.
- Sözleşmenizi dağıtın.
- Blockchain'deki dağıtılan çok imzalı cüzdan ile etkileşimde bulunun.
Sözleşmeyi derleyin
Sözleşmeyi Fift ile derlemek için:
func -o multisig-code.fif -SPA stdlib.fc multisig-code.fc
Çok imzalı sahiplerin anahtarlarını hazırlayın
Katılımcı anahtarlarını oluşturun
Bir anahtar oluşturmak için şunu çalıştırmanız gerekir:
fift -s new-key.fif $KEY_NAME$
- Burada
KEY_NAME
, özel anahtarın yazılacağı dosyanın adıdır.
Örneğin:
fift -s new-key.fif multisig_key
Özel anahtar içeren bir multisig_key.pk
dosyası alacağız.
Genel anahtarları toplayın
Ayrıca, script genel anahtarı aşağıdaki formatta verecektir:
Genel anahtar = Pub5XqPLwPgP8rtryoUDg2sadfuGjkT4DLRaVeIr08lb8CB5HW
"Genel anahtar = "
ifadesinden sonrasını bir yere kaydetmelisiniz!
Bunu keys.txt
dosyasına kaydedelim. Her satırda bir Genel Anahtar olacak şekilde, bu önemlidir.
Sözleşmenizi dağıtın
Lite-client aracılığıyla dağıtın
Tüm anahtarları oluşturduktan sonra, genel anahtarları bir metin dosyası olan keys.txt
içinde toplamanız gerekir.
Örneğin:
PubExXl3MdwPVuffxRXkhKN1avcGYrm6QgJfsqdf4dUc0an7/IA
PubH821csswh8R1uO9rLYyP1laCpYWxhNkx+epOkqwdWXgzY4
Bundan sonra, şunu çalıştırmanız gerekir:
fift -s new-multisig.fif 0 $WALLET_ID$ wallet $KEYS_COUNT$ ./keys.txt
$WALLET_ID$
- mevcut anahtara atanan cüzdan numarası. Aynı anahtar ile her yeni cüzdan için benzersiz bir$WALLET_ID$
kullanılması önerilir.$KEYS_COUNT$
- onay için gereken anahtar sayısı, genellikle genel anahtar sayısına eşittir.
Aynı anahtarlarla birçok cüzdan oluşturmak mümkündür (Alice anahtarı, Bob anahtarı). Eğer Alice ve Bob'un zaten bir hazineyi varsa ne olacak? Bu nedenle $WALLET_ID$
burada çok önemlidir.
Script aşağıdakine benzer bir çıktı verecektir:
new wallet address = 0:4bbb2660097db5c72dd5e9086115010f0f8c8501e0b8fef1fe318d9de5d0e501
(Adres wallet.addr dosyasına kaydediliyor)
Atlamaya kapalı adres (ilk kurulum için): 0QBLuyZgCX21xy3V6QhhFQEPD4yFAeC4_vH-MY2d5dDlAbel
Atlamaya açık adres (ilerideki erişim için): kQBLuyZgCX21xy3V6QhhFQEPD4yFAeC4_vH-MY2d5dDlAepg
(Cüzdan oluşturma sorgusu wallet-create.boc dosyasına kaydedildi)
Eğer "genel anahtar 48 karakter uzunluğunda olmalıdır" hatası alıyorsanız, lütfen keys.txt
dosyasının unix tipi kelime sarılması - LF ile olduğundan emin olun. Örneğin, kelime sarımını Sublime metin düzenleyici üzerinden değiştirebilirsiniz.
Atlamaya açık adresin korunması daha iyidir - bu cüzdanın adresidir.
Sözleşmenizi etkinleştirin
Yeni oluşturduğumuz hazinemize bazı TON göndermelisiniz. Örneğin 0.5 TON. Test ağı jetonlarını @testgiver_ton_bot aracılığıyla gönderebilirsiniz.
Bundan sonra, lite-client'ı çalıştırmalısınız:
lite-client -C global.config.json
Ana ağ için taze bir yapılandırma dosyası global.config.json
veya test ağı için testnet alabilirsiniz.
Lite-client'ı başlattıktan sonra, bağlantının başarılı olduğunu kontrol etmek için lite-client konsolunda time
komutunu çalıştırmalısınız:
time
Tamam, lite-client çalışıyor!
Sonrasında cüzdanı dağıtmak için şu komutu çalıştırmalısınız:
sendfile ./wallet-create.boc
Bundan sonra cüzdan bir dakika içinde çalışmaya hazır olacaktır.
Çok imzalı cüzdan ile etkileşime geçin
Bir istek oluşturun
Öncelikle bir mesaj isteği oluşturmalısınız:
fift -s create-msg.fif $ADDRESS$ $AMOUNT$ $MESSAGE$
$ADDRESS$
- paraların gönderileceği adres$AMOUNT$
- paraların miktarı$MESSAGE$
- derlenmiş mesaj için dosya adı.
Örneğin:
fift -s create-msg.fif EQApAj3rEnJJSxEjEHVKrH3QZgto_MQMOmk8l72azaXlY1zB 0.1 message
İşleminiz için yorum eklemek istiyorsanız -C comment
parametresini kullanın. Daha fazla bilgi almak için create-msg.fif dosyasını parametresiz çalıştırın.
Bir cüzdan seçin
Daha sonra parayı göndereceğiniz bir cüzdan seçmeniz gerekir:
fift -s create-order.fif $WALLET_ID$ $MESSAGE$ -t $AWAIT_TIME$
Burada
$WALLET_ID$
— bu çok imzalı sözleşme ile teminat altına alınmış cüzdanın kimliğidir.$AWAIT_TIME$
— akıllı sözleşmenin çok imzalı cüzdan sahiplerinden istek için imza alacağı süredir.$MESSAGE$
— önceki aşamada oluşturulan mesaj boc-dosyasının adıdır.
Eğer $AWAIT_TIME$
süresi geçmeden önce istek imzalanmazsa, istek geçersiz hale gelir. Genellikle, $AWAIT_TIME$
birkaç saat (7200 saniye) kadar sürer.
Örneğin:
fift -s create-order.fif 0 message -t 7200
Hazır dosya order.boc
içinde kaydedilecektir.
order.boc
, anahtar sahipleriyle paylaşılmalıdır; onların bunu imzalaması gerekmektedir.
Kendi imzanızı ekleyin
İmzalamak için şunları yapmalısınız:
fift -s add-signature.fif $KEY$ $KEY_INDEX$
$KEY$
- imza atacağınız özel anahtarı içeren dosyanın adı, uzantısı olmadan.$KEY_INDEX$
-keys.txt
dosyasındaki belirli anahtarın indeksidir (sıfır tabanlı).
Örneğin, multisig_key.pk
dosyamız için:
fift -s add-signature.fif multisig_key 0
Bir mesaj oluşturun
Herkes siparişi imzaladıktan sonra, bunun cüzdan için bir mesaja dönüşmesi ve şu komut ile tekrar imzalanması gerekir:
fift -s create-external-message.fif wallet $KEY$ $KEY_INDEX$
Bu durumda, cüzdan sahibinin sadece bir imzası yeterli olacaktır. Amaç, geçersiz imzalarla bir sözleşme saldırısı yapılamamasıdır.
Örneğin:
fift -s create-external-message.fif wallet multisig_key 0
İmzanızı TON Blockchain'e gönderin
Bundan sonra, light client'ı tekrar başlatmalısınız:
lite-client -C global.config.json
Ve son olarak, imzamızı göndermek istiyoruz! Sadece şu komutu çalıştırın:
sendfile wallet-query.boc
Eğer diğer herkes isteği imzaladıysa, bu tamamlanacaktır!
Başardınız, ha-ha! 🚀🚀🚀